সি++ স্ট্যান্ডার্ড লাইব্রেরিতে অ্যালগরিদমগুলোকে মূলত দুইটি প্রধান শ্রেণীতে ভাগ করা যায়: Non-modifying algorithms এবং Modifying algorithms। এই শ্রেণীবিভাগগুলো মূলত তাদের কনটেইনারের উপাদানগুলোর ওপর প্রভাবের ওপর ভিত্তি করে করা হয়। Non-modifying অ্যালগরিদম উপাদানগুলো পরিবর্তন করে না, বরং এগুলো পরীক্ষা, গণনা, বা অন্বেষণ করে। Modifying অ্যালগরিদম উপাদানগুলো পরিবর্তন করে বা নতুনভাবে সাজায়।
Non-modifying Algorithms
Non-modifying অ্যালগরিদম কনটেইনারের উপাদানগুলো পরিবর্তন না করেই এগুলোর ওপর বিভিন্ন কার্য সম্পাদন করে। এদের মূলত ডেটা যাচাই, খোঁজা, এবং গণনার জন্য ব্যবহার করা হয়।
কিছু সাধারণ Non-modifying Algorithms:
- for_each: প্রতিটি উপাদানের উপর নির্দিষ্ট একটি ফাংশন প্রয়োগ করে।
- find: নির্দিষ্ট মানের প্রথম উপাদান খুঁজে বের করে।
- count: নির্দিষ্ট মানের উপাদানগুলোর সংখ্যা গণনা করে।
- count_if: নির্দিষ্ট শর্ত পূরণ করা উপাদানগুলোর সংখ্যা গণনা করে।
- all_of: পরীক্ষা করে যে সমস্ত উপাদান নির্দিষ্ট শর্ত পূরণ করে কিনা।
- any_of: পরীক্ষা করে যে কোনো একটি উপাদান নির্দিষ্ট শর্ত পূরণ করে কিনা।
- none_of: পরীক্ষা করে যে কোনো উপাদান নির্দিষ্ট শর্ত পূরণ করে না।
- equal: দুটি রেঞ্জ সমান কিনা তা পরীক্ষা করে।
- mismatch: দুটি রেঞ্জের প্রথম অমিল উপাদানটি খুঁজে বের করে।
উদাহরণ:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// for_each অ্যালগরিদম ব্যবহার করে প্রতিটি উপাদান প্রিন্ট করা
std::for_each(numbers.begin(), numbers.end(), [](int n) { std::cout << n << " "; });
// count অ্যালগরিদম ব্যবহার করে সংখ্যা গণনা করা
int count_of_3 = std::count(numbers.begin(), numbers.end(), 3);
std::cout << "\nCount of 3: " << count_of_3 << std::endl;
return 0;
}এখানে for_each এবং count অ্যালগরিদম ব্যবহার করে কনটেইনারের উপাদানগুলো পরীক্ষা করা হয়েছে, কিন্তু কোনো উপাদান পরিবর্তন করা হয়নি।
Modifying Algorithms
Modifying অ্যালগরিদম কনটেইনারের উপাদানগুলো পরিবর্তন বা নতুনভাবে সাজানোর জন্য ব্যবহৃত হয়। এদের মাধ্যমে কনটেইনারের ডেটার স্ট্রাকচার পরিবর্তন, এলিমেন্টের স্থান পরিবর্তন, নতুন এলিমেন্ট যোগ ইত্যাদি করা যায়।
কিছু সাধারণ Modifying Algorithms:
- fill: একটি রেঞ্জের সমস্ত উপাদানে নির্দিষ্ট মান দিয়ে পূর্ণ করে।
- fill_n: একটি নির্দিষ্ট সংখ্যক উপাদানে নির্দিষ্ট মান দিয়ে পূর্ণ করে।
- copy: একটি রেঞ্জের উপাদানগুলো অন্য একটি রেঞ্জে কপি করে।
- copy_if: নির্দিষ্ট শর্ত পূরণ করা উপাদানগুলো অন্য একটি রেঞ্জে কপি করে।
- move: একটি রেঞ্জের উপাদানগুলোকে অন্য একটি রেঞ্জে সরিয়ে নিয়ে যায়।
- replace: নির্দিষ্ট মানগুলোকে নতুন মান দিয়ে প্রতিস্থাপন করে।
- replace_if: নির্দিষ্ট শর্ত পূরণ করা উপাদানগুলোকে নতুন মান দিয়ে প্রতিস্থাপন করে।
- remove: নির্দিষ্ট মানের উপাদানগুলো সরিয়ে দেয়।
- remove_if: নির্দিষ্ট শর্ত পূরণ করা উপাদানগুলো সরিয়ে দেয়।
- reverse: একটি রেঞ্জের উপাদানগুলো উল্টে দেয়।
- sort: একটি রেঞ্জের উপাদানগুলোকে সাজিয়ে দেয়।
- partition: নির্দিষ্ট শর্ত পূরণ করা উপাদানগুলোকে গ্রুপ করে।
উদাহরণ:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {3, 1, 4, 1, 5, 9, 2};
// sort অ্যালগরিদম ব্যবহার করে ভেক্টরকে সাজানো
std::sort(numbers.begin(), numbers.end());
// reverse অ্যালগরিদম ব্যবহার করে ভেক্টরকে উল্টে দেয়া
std::reverse(numbers.begin(), numbers.end());
// replace অ্যালগরিদম ব্যবহার করে 1 মানগুলোকে 10 দ্বারা প্রতিস্থাপন করা
std::replace(numbers.begin(), numbers.end(), 1, 10);
// পরবর্তীতে ভেক্টরের উপাদানগুলো প্রিন্ট করা
for (int n : numbers) {
std::cout << n << " ";
}
return 0;
}উপরের উদাহরণে sort, reverse, এবং replace অ্যালগরিদমগুলো ব্যবহার করা হয়েছে যা কনটেইনারের উপাদানগুলো পরিবর্তন বা নতুনভাবে সাজাতে সহায়ক।
সংক্ষেপে
- Non-modifying Algorithms: এই অ্যালগরিদমগুলো কনটেইনারের উপাদানগুলো পরিবর্তন না করে তাদের ওপর বিভিন্ন কার্য সম্পাদন করে। যেমন:
for_each,find,count,equal, ইত্যাদি। - Modifying Algorithms: এই অ্যালগরিদমগুলো কনটেইনারের উপাদানগুলো পরিবর্তন বা নতুনভাবে সাজায়। যেমন:
sort,replace,remove,fill, ইত্যাদি।
এই অ্যালগরিদমগুলো ব্যবহার করে C++ এ ডেটা প্রসেসিংকে সহজ করা যায় এবং প্রোগ্রামিংয়ে উচ্চমানের কার্যকারিতা নিশ্চিত করা যায়।
Read more